package com.demo.java.OD601_650.OD604;

import java.util.Scanner;
import java.util.Arrays;
import java.util.Comparator;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【 叠积木(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146589677
 */
public class OdMain {
    public static int result = 0;

    public static void main(String[] args) {
        // 输入处理
        Scanner in = new Scanner(System.in);
        String[] s = in.nextLine().split(" ");  // 读取输入的木块长度和数量
        Integer[] nums = new Integer[s.length];
        int count = 0;

        // 将输入的木块长度转化为整数数组
        for (int i = 0; i < nums.length; i++) {
            nums[i] = Integer.parseInt(s[i]);
            count += 1;
        }

        // 如果木块只有1或2块，则直接判断
        if (count == 1 || count == 2) {
            solve(nums.length, nums);
            return;
        }

        // 对木块长度进行降序排序
        Arrays.sort(nums, new Comparator<Integer>() {
            @Override
            public int compare(Integer a, Integer b) {
                return b - a;  // 按照从大到小的顺序排序
            }
        });

        int len = nums[0];  // 设定初始拼接长度为最大的木块长度
        boolean flag = false;  // 用于标记是否找到有效的拼接方式

        while (true) {
            // 如果当前拼接长度大于最大两块木块的和，则跳出
            if (len > nums[0] + nums[1]) {
                break;
            } else {
                result = 0;
                int left = 0, right = count - 1;  // 双指针分别从头和尾开始
                while (true) {
                    if (left >= count || nums[left] != len) {  // 如果左指针越界或当前木块长度不等于目标长度，跳出
                        break;
                    } else {
                        left += 1;
                        result += 1;  // 统计拼接成功的木块
                    }
                }

                while (true) {
                    if (left >= right) {  // 如果左指针和右指针重合，退出
                        break;
                    } else {
                        if (nums[left] + nums[right] == len) {  // 如果左木块和右木块的和等于目标长度，拼接成功
                            left += 1;
                            right -= 1;
                            result += 1;
                        } else {
                            break;  // 否则，退出
                        }
                    }
                }

                if (left > right) {
                    System.out.println(result);  // 输出结果
                    flag = true;
                    break;
                }
            }
            len += 1;  // 尝试更大的拼接长度
        }

        if (!flag) {
            System.out.println(-1);  // 如果没有找到符合条件的拼接，输出-1
        }
    }

    // 如果木块数量为1或2，直接判断是否符合条件
    public static void solve(int n, Integer[] nums) {
        System.out.println(n == 1 ? 1 : (nums[0] - nums[1] != 0 ? 1 : 2));
    }
}